#include "parser.h"
#include "hs02.h"
#include "sensor.h"
#include "../interface/mensagem.h"

#include <iostream>


using namespace std;

Hs02::Hs02(){
    init();

    sensores.push_back(new Sensor("Hora", "id", "DATETIME"));
    sensores.push_back(new Sensor("Precipitaçao", "precipitacao", "REAL"));
    sensores.push_back(new Sensor("Sedimentos", "sedimentos", "REAL"));
    sensores.push_back(new Sensor("Nivel", "nivel", "REAL"));
    sensores.push_back(new Sensor("Vazao", "vazao", "REAL"));
    sensores.push_back(new Sensor("Bateria", "bateria", "REAL"));

    QString aux;
    //cria tabela Estacao
    aux = "CREATE TABLE IF NOT EXISTS Estacao(id DATETIME NOT NULL, precipitacao REAL NOT NULL, sedimentos REAL NOT NULL, nivel REAL NOT NULL, vazao REAL NOT NULL, bateria REAL NOT NULL, PRIMARY KEY(id));";
    db->exec(aux);

}

Hs02::~Hs02(){
    db->exec("DROP TABLE Estacao");
    db->close();
}

QStringList Hs02::parse(){ //insere valores na tabela
    QStringList lista;
    QString linha;
    QString insert;
    int cont = 0;

    this->f->open(QIODevice::ReadOnly); // abre o arquivo somente para leitura
    if (!this->f->exists()){
        Mensagem::erro("Erro", "Arquivo não existe!");

        return lista;
    }


    linha = f->readLine();                                                        //le a primeira linha
    while(cont < 3){                                                              //conta 3 linhas de separadores
        while(!linha.contains("---------------------------------------------")){
            linha = f->readLine();
        }
        cont++;
        linha = f->readLine();                                                   //primeira linha de valores
    }

    db->openTransaction();
    while (!f->atEnd()){ //enquanto nao encontra o fim do arquivo insere os valores na tabela e le a proxima linha
        insert = "INSERT INTO Estacao VALUES(";

        linha=linha.trimmed();
        linha=linha.replace(",",".");
        lista = linha.split(QRegExp("\\s\\s+"));

        QDateTime dateTime = QDateTime::fromString(lista.at(0), "dd/MM/yyyy hh:mm:ss");
        QString date = "'" + dateTime.toString("yyyy-MM-dd hh:mm:ss") +"'";

        lista.pop_front();
        lista.push_front(date);
        QString resultado = lista.join(", ");

        insert += resultado+")";
        //cout << insert.toStdString() << endl;


        db->exec(insert);

        linha = f->readLine();
    }
    db->endTransaction();
    f->close();

    return lista;
}

